---
title: "常見陷阱與偵錯指南"
description: "學習 Rust 開發中常見的陷阱，以及如何利用偵錯工具和編譯器提示解決問題"
---

# 常見陷阱與偵錯指南

## 📖 學習目標

本模組將幫助你識別和避免 Rust 開發中常見的陷阱，並掌握有效的偵錯技巧和工具，從而提高開發效率。

---

## 🎯 常見陷阱

### 1. 所有權與借用陷阱

- **移動後使用**: 在變數的所有權被移動到另一個變數或函式後，仍然嘗試使用它。
- **可變與不可變借用**: 在不可變借用仍然有效時建立可變借用，反之亦然。
- **懸垂引用**: 返回一個指向在函式結束時超出作用域的變數的引用。

### 2. 生命週期陷阱

- **生命週期不匹配**: 將具有不同生命週期的引用傳遞給期望它們具有相同生命週期的函式。
- **返回局部變數的引用**: 嘗試返回對函式內部建立的變數的引用。

### 3. 異步程式設計陷阱

- **在異步程式碼中阻塞**: 在異步上下文中呼叫阻塞函式，這會暫停整個執行器。
- **忘記 `.await`**: 忘記在 future 上呼叫 `.await`，這將導致它無法執行。

### 4. 錯誤處理陷阱

- **過度使用 `unwrap()` 和 `expect()`**: 在生產程式碼中使用 `unwrap()` 或 `expect()` 可能導致 panic。
- **忽略 `Result` 和 `Option`**: 不處理 `Result` 和 `Option` 型別的 `Err` 或 `None` 變體。

### 5. 效能陷阱

- **不必要的複製**: 複製大型物件而不是借用它們。
- **低效的字串連接**: 在循環中使用 `+` 連接字串，這可能很慢。

---

## 🛠️ 偵錯工具與技巧

### 1. 編譯器提示

Rust 編譯器提供詳細的錯誤訊息和建議。請密切關注它們。

### 2. `println!` 偵錯法

使用 `println!` 巨集在程式碼的不同位置列印變數的值。

### 3. 日誌庫

使用像 `log` 和 `env_logger` 這樣的日誌庫進行更結構化和可設定的日誌記錄。

### 4. 偵錯器

使用像 `gdb` 或 `lldb` 這樣的偵錯器，並配合 `rust-gdb` 或 `rust-lldb` 指令碼以獲得更好的偵錯體驗。

### 5. 效能分析工具

在 Linux 上使用 `perf` 或在 macOS 上使用 Instruments 等工具來分析你的程式碼並識別效能瓶頸。

---

## 📝 總結

本模組涵蓋了 Rust 開發中的常見陷阱，並介紹了各種偵錯工具和技術。透過了解這些陷阱並使用正確的工具，你可以編寫出更健壯、更高效的 Rust 程式碼。

---

**繼續學習**: [Idiomatic Rust 風格](./module-11-idiomatic-rust-style)
